第07章 安全
第7章 安全
一、签名、摘要、数字证书
下面的逻辑是层层递进的,黑色的字体代表不合理的地方以及下一代改进的原因。
- 下载到的js代码怎么知道是否应该执行这个脚本,这些文本经过网络传输怎么知道来源于合法网站,且传输的过程里面没有经过第三方的篡改?
- 摘要:一块数据生成的一个电子指纹,例如SHA1(hash散列),无论是多大多小的输入数据,通过计算出来都是一个20字节的数据。特点就是:哪怕修改输入数据里面的一个比特,整个计算出的摘要值,都会发生巨大的变化。想要伪造出一个和原来消息相同的摘要值的难度是非常大的,可能性是2的60次方,几乎不可能。因此通过摘要就能防止消息在传递的时候被篡改。假如摘要和传递目标消息一块传递,因为摘要的一些算法都是公开的,假如被截获了,截获者单独的用算法算出来一个新的摘要值,那就达不到效果。所以摘要需要单独传递,并且保证不可篡改,因此就有了签名。
- 数字签名:摘要经过加密,就得到数字签名。签名要用到公钥、私钥对,生成这种公钥私钥对有很多算法,用公钥加密的东西只能用私钥解密、私钥加密的东西只能公钥解密。根据公钥无法计算出私钥。总之公钥是公开的,给谁都可以给的,但是私钥是留给自己的,打死不能给的。这样就保证了传递的可靠性。用私钥加密,然后分发出去,客户用公钥解密。但是,假如公钥传递的途中被截获篡改,有人修改了怎么办?证书应运而生。
- 数字证书:数字证书里有个重要概念,CA,发送方先把自己的公钥给CA,CA对其进行加密得到加密后的发送方公钥(用的是CA的私钥和CA加密算法),也就是CA的数字证书。接收方拿到后,首先从数字证书中解密出发送方公钥(用的是CA的公钥和CA解密算法),这个公钥必然是可信的。然后就是和前面一样的流程,拿发送方公钥去解密数字证书,得到摘要;最后比对摘要是否一致。怎么保证“CA”的公钥不是伪造的呢?CA的公钥是公开的,甚至刻在浏览器系统里面的。
二、加密
- 非对称加密用的是一对秘钥,分别叫做公钥(public key)和私钥(private key),也叫非对称秘钥。非对称秘钥既可以用于加密还可以用于认证。(性能一般比较差,但是比较安全)
- 对称加密:加密和解密用的是同一个密码或者同一套逻辑的加密方式。我们平时碰到的绝大多数加密就是对称加密,比如:指纹解锁,PIN 码锁,保险箱密码锁,账号密码等都是使用了对称加密。(性能一般比较好,速度快,但是存在的问题就是key加密的问题)
三、SSL
- TLS:传输层安全,SSL:安全套接字
- 具体流程:当用户访问https的网站时候,服务器用公钥产生一个加密过的内容,浏览器用CA的公钥解开,得到服务器端的公钥,然后之后用户和网站的所有通信都会用密钥加密,保证安全。
HTTPS 通信方式与HTTP 通信方式的差异:
- HTTP是明文传输内容的,可能会被截获,不安全。HTTPs的传输内容经过了公钥的加密,所以更安全。
- 默认的端口不一样,HTTP默认端口80,HTTPS默认443,对应后端的分别是8080和8443端口
- 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
- HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。